﻿/*
 * 位运算符
 * 
 *          只对整数进行的运算，整数由bit位构成，将两个或一个整数的bit位进行操作跟逻辑运算，叫做位运算
 *          
 *          &：与运算符              二者都为1才能为1，否则就是0
 *          
 *          |:或运算符               二者其中只要存在一个1，结果就是1
 *          
 *          ^:异或运算符             二者不同，结果为1，否则为0
 *          
 *          ~：取反运算符            将所有bit位，0变1，1变0
 *          
 * 左移右移运算符
 * 
 *          将一个整数的所有bit位数据，集体向左\向右移动一定的位数
 *          
 *          << ：左移运算符
 *          
 *          >> : 右移运算符
 *          
 *          左移n位，原来的数字需要乘以 2 的n次方
 *          右移n位，原来的数字需要乘以 2 的-n次方
 */

namespace 位运算符
{
    internal class Program
    {
        static void Main(string[] args)
        {
            //bit : 00...000 0100
            int a = 4;
            //bit: 00.000 0110
            int b = 6;

            Console.WriteLine("a & b = " + (a & b));
            Console.WriteLine("a | b = " + (a | b));
            Console.WriteLine("a ^ b = " + (a ^ b));
            Console.WriteLine("~ a = " + (~ a));


            //bit : 00...00 0010
            int c = 2;

            Console.WriteLine("c << 2 :" + (c << 2));
            Console.WriteLine("c >> 1 :" + (c >> 1));
            Console.WriteLine("c >> 2 :" + (c >> 2));


            Console.WriteLine("-------------练习--------------");
            //00.00 1101
            int d = 13;

            Console.WriteLine("第一位：" + (d & 1));
            Console.WriteLine("第二位：" + (d >> 1 & 1));
            Console.WriteLine("第三位：" + (d >> 2 & 1));
            Console.WriteLine("第四位：" + (d >> 3 & 1));
            


            

        }
    }
}